1

oAuth2 登录方式

本来公司项目是正常的用户名、密码登录,但是突然转换成了第三方oAuth2方式登录,由此开始学习了该种登录形式。

思路

共有5种授权模式,有授权码模式、简化模式、密码模式、客户端模式,这里只介绍授权码模式,这大概是功能最完整、流程最严密的授权模式,大概也是使用最多的授权模式。

同普通的用户名、密码登录不同,oAuth2登录方式中,增加了一个授权层。用户想要进行登录操作时,会被跳转到授权服务器上进行登录,在授权服务器登录成功时,会触发一个回调函数重新回到当前用户所在系统,之后执行后续操作。

这里使用了simple-oauth2。正常的npm install simple-oauth2即可,想了解更详细的使用方法,点击此传送门便可了解。

配置信息:

cosnt oauth2 = simpleOauth.create({
        "clientId": "<id>",
        "clientSecret": "<secret>",
        "tokenPath": "/oauth/access_token",
        "authorizePath": "/oauth/authorize"
    })

步骤:

(1)用户点击登录按钮。服务器事先设定一个配置信息如上所示,后台通过下面的这个函数会得到一个Url,结果类似于/oauth/authorize/redirect_uri=http://localhost:3000/callback&client_id=&clientsecret=&response_type=code

// /auth路由处理
const authorizationUrl = oauth2.authorizationCode.authorizeURL({
    redirect_uri: 'http://localhost:3000/callback"
    // scope: '' 可有可无参数
    // state: '' 可有可无参数 可以自己任意填写
})

(2)通过该Url,可以到达三方登录界面,用户在三方登陆成功时,上面的redirect_uri就会被回调,同时会附带一个code在redirect_uri上,该code由三方登录服务器提供,该code与客户端Id和redirect_uri是一一对应的关系,回调的url如/callback/code=

// /callback路由处理
let code = req.query.code

oauth2.authorizationsCode.getToken(code, (err, result) => {
    if(err) // handle error
    const token = oauth2.accessToken.create(result) // 这里就是得到的access_token
})

(3)重要的token得到之后,就预示着三方登录已经登录成功。接下来就是自己系统的处理了。

至此,三方登录已经成功登录。

写的可能不尽如人意,我也是学习者,写的目的也是为了让自己对oAuth2登录加深印象,如果错误,欢迎指正,一起进步啊。


luckyziv
1.2k 声望52 粉丝

摸索中前进!!